"""
九九乘法表教学案例 - Flask后端实现
作者: javy21
邮箱: javy21@126.com
原创声明：本代码仅供教学使用，转载请注明出处
"""

from flask import Flask, render_template, request, Response
import time
import json

app = Flask(__name__)

def generate_multiplication_table():
    """
    🎯 核心功能：生成九九乘法表 - javy21
    编程思路：使用嵌套循环，外层控制行，内层控制列
    就像爸爸带着孩子数数，爸爸数到几，孩子就从1数到几
    """
    lines = []  # 初始化一个空列表，用来存储每一行的结果

    # 外层循环：控制行数 (1到9)
    for i in range(1, 10):
        line = ""  # 初始化空字符串，存储当前行的内容

        # 内层循环：控制每行的列数 (1到i)
        for j in range(1, i + 1):
            # 🧮 核心计算：生成每个乘法公式
            line += f"{j}×{i}={i*j}\t"  # \t是制表符，让输出对齐

        lines.append(line.strip())  # 去除末尾空格并添加到结果列表

    return lines

@app.route('/')
def index():
    """主页面路由，返回HTML模板 - javy21"""
    return render_template('index.html')

@app.route('/api/execute', methods=['GET'])
def execute_command():
    """
    🚀 API接口：执行命令并返回实时输出 - javy21
    技术要点：使用Server-Sent Events实现实时数据流
    就像水管一样，数据一滴一滴地流到前端
    """
    command = request.args.get('command', '')  # 获取前端传来的命令参数

    def generate():
        """生成器函数：逐步产生输出内容 - javy21"""
        if command == 'multiplication':
            # 📊 生成九九乘法表流程
            yield f"data: {json.dumps({'type': 'output', 'content': '🌟 开始生成九九乘法表...'})}\n\n"
            time.sleep(0.5)

            yield f"data: {json.dumps({'type': 'output', 'content': '📐 正在计算乘法公式...'})}\n\n"
            time.sleep(0.5)

            yield f"data: {json.dumps({'type': 'output', 'content': '=========================='})}\n\n"

            # 🎯 核心代码执行：逐行生成乘法表
            lines = generate_multiplication_table()
            for i, line in enumerate(lines, 1):
                yield f"data: {json.dumps({'type': 'output', 'content': f'第{i}行: {line}'})}\n\n"
                time.sleep(0.3)  # 添加延迟，让输出更有节奏感

            yield f"data: {json.dumps({'type': 'output', 'content': '=========================='})}\n\n"
            yield f"data: {json.dumps({'type': 'output', 'content': '✅ 九九乘法表生成完成！'})}\n\n"

        elif command == 'clear':
            # 🧹 清空屏幕的特殊信号
            yield f"data: {json.dumps({'type': 'clear'})}\n\n"
            return

        else:
            # ❓ 处理未知命令
            yield f"data: {json.dumps({'type': 'output', 'content': '❓ 未知命令，请输入有效指令'})}\n\n"

        # 🏁 执行完成信号
        yield f"data: {json.dumps({'type': 'complete'})}\n\n"

    return Response(generate(), mimetype='text/event-stream')

if __name__ == '__main__':
    # 🚀 启动Flask应用 - javy21
    app.run(debug=True, host='0.0.0.0', port=5000)